AWSリソース上限数と現在の使用数を簡単に比較したい
こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな ネクストモード株式会社 の吉井です。
AWS アカウントには、サービスクォータ というリソース使用数の上限値が設けられています。
AWS 内部のリソースが枯渇しないようにという理由もありますが、それよりもユーザーが必要以上のリソース確保を誤って行ってしまい過大請求をされることを防いでくれるという防御面の理由が大きいように思います。
この上限値ですが現時点の値はどれくらいで残りどの程度リソースを作成できるのかを忘れてしまうと
いざというときに希望のリソースが作成できず、上限緩和申請で時間を取られてしまうというミスをしてしまうことがよくあります。
AWS CLI 等で上限値・現在値を都度確認して突き合わせるのも面倒に感じていたところ便利なツールを発見したので紹介します。
インストール
Docker Image を使う方法とローカルマシンにコマンドをインストール方法の2パターンがあります。
本エントリではローカルインストールを紹介します。
Requirements
awslimitchecker docs からコピペしました前提条件です。
予め揃えておきます。ローカルを汚したくない場合は Docker Image を活用ください。
- Python 3.5 or newer.
- Python VirtualEnv and pip (recommended installation method; your OS/distribution should have packages for these)
- boto3 >= 1.4.6 and its dependency botocore >= 1.6.0.
インストール
virtualenv をインストールします。
pip3 install virtualenv --user
続いて awslimitchecker をインストールします。
virtualenv limitchecker source limitchecker/bin/activate pip3 install awslimitchecker
インストール確認
コマンドのヘルプを表示させインストールが正常であることを確認します。
awslimitchecker --help
コマンド実行
awslimitchecker docs にある通りコマンドを実行していきます。
必要な IAM ポリシー
awslimitchecker で結果を得るために必要な IAM ポリシーを表示します。
コマンドを実行する IAM ユーザーに表示されたポリシーを付与します。
awslimitchecker --iam-policy
リージョンの指定
-r
または --region
でリージョンの指定です。
一回のコマンドでは一つのリージョンしか指定できません。
複数リージョンで実行したい場合は bash for などでループします。
awslimitchecker -r ap-northeast-1
上限値に対する現在値の確認
一番使いたいコマンドです。
デフォルトでは80%で WARNING、99% で CRITICAL です。
これらのしきい値は -W
、-C
で任意に変更可能です。
awslimitchecker -W 80 -C 99
下が出力サンプルです。
カッコのなかが上限値、リソース ID と現在値が = で結ばれて表示されます。
出力を省略しているのでリソース ID が一つだけですが、実際は9つ表示されます。
ApiGateway/Custom authorizers per API (limit 10) WARNING: o7dr5l47tk=9 ApiGateway/Resources per API (limit 300) CRITICAL: o7dr5l47tk=299
上限値の表示
上限値を表示させます。
awslimitchecker -l
現在値の表示
現在値を表示させます。
awslimitchecker -u
Assume Role
Assume Role も可能です。
- -r リージョン
- -A スイッチ先アカウント
- -R スイッチ先ロール名
- -E External ID (指定している場合)
awslimitchecker -r ap-northeast-1 -A 123456789012 -R foobar
使い方
EC2 上にインストールして cron などで定期的に実行し結果を SNS 経由で Slack 通知、または、
ECS で定期実行して結果を SNS 経由で Slack 通知のような使い方がシンプルだと思います。
SNS へ投げる処理と SNS から Slack は作り込みになります。
リソース作成前後に都度手動実行も手間ではありますが検討する価値はあると思います。
サポートしている上限
執筆日 (2021/06/17) 時点でサポートしている上限は以下です。
- ApiGateway
- AutoScaling
- CloudFormation
- CloudTrail
- Directory Service
- DynamoDB
- EBS
- EC2
- EFS
- EKS
- ELB
- Firehose
- IAM
- Kinesis
- Lambda
- RDS
- Route53
- SES
- VPC
詳細は公式 Supported Limits をご覧ください。
感謝
このような便利で素敵なツールを公開してくださっている jantman 氏に感謝申し上げます。
また、多くの Contributors にも感謝申し上げます。
参考
awslimitchecker
awslimitchecker docs
Virtualenv
以上、吉井 亮 がお届けしました。